#include <iostream>
#include <string>
#include <memory>
#include "udpserver.hpp"
#include "dict.hpp"
#include "InetAddr.hpp"

// 真实情况下，客户端发送的消息，是一种请求，我们要针对该请求做出处理
// 所以服务端在收到报文后，不应该是打印一下，而是执行回调函数，去处理报文
std::string handle(const std::string& message)
{
    return message + " handeled!!!";
}


int main(int argc, char *argv[])
{
    if(argc != 2){
        std::cerr << "Usage-> " << argv[0] << "[port]" << std::endl;
    }
    u_int16_t port = std::stoi(argv[1]);

    // 1.创建字典
    Dict dict;
    dict.Load();

    //std::unique_ptr<UDPsocket> server = std::make_unique<UDPsocket>(port, handle);
    std::unique_ptr<UDPsocket> server = std::make_unique<UDPsocket>(port, [&](const std::string &word, InetAddr &client)->std::string{
        return dict.Translate(word, client);
    } );
    server->Init();
    server->Start();
    
    return 0;
}